package com.augurit.common.sysfile.service;

import java.util.List;

import org.springframework.transaction.annotation.Transactional;

import com.augurit.common.base.service.ICrudService;
import com.augurit.common.entity.SysFileLink;
import com.augurit.common.sysfile.web.form.SysFileForm;

/**
 * 附件接口
 */
public interface ISysFileService extends ICrudService<SysFileForm, Long> {	
	/**
	 * 判断是否存在指定文件编号的附件记录
	 * @param fileCode 文件编号
	 * @return
	 */
	public boolean exist(String fileCode);
	
	public List<SysFileForm> getAll();
	
	/**
	 * 根据主键id级联删除附件对象
	 * @param fileIds
	 */
	public void deleteCascade(Long... sysFileIds);
	
	/**
	 * 根据值对象名称和值对象主键删除附件
	 * @param entity 值对象名称
	 * @param entityId 值对象主键
	 */
	public void deleteByEntity(String entity, Long entityId);
	
	/**
	 * 根据SysFileForm对象的主键级联删除附件对象
	 * @param forms
	 */
	public void deleteCascade(SysFileForm... forms);
	
	/**
	 * 按值对象名称分组查询
	 * @return
	 */
	public List<SysFileLink> getGroupByEntity();
	/**
	 * 获取所有的值对象名称
	 */
	public List<String> getAllEntityList();
	
	/**
	 * 获取指定值对象的值主键id列表
	 * @param entity
	 * @return
	 */
	public List<Long> getEntityIdListByEntity(String entity);
	
	/**
	 * 获取指定值对象名称和值对象主键下的附件对象列表
	 * @param entity 值对象
	 * @param entityId 值主键
	 * @return
	 */
	public List<SysFileForm> getByEntityAndEntityId(String entity, Long entityId);
	
	public void save(SysFileForm form, String userName);
	
	/**
	 * 获取附件数量
	 * @param entity
	 * @param entityId
	 * @return
	 */
	public int getSysFileCount(String entity, Long entityId);
	
	public List<SysFileForm> getSortedFilesByBusObj(String entity, Long entityId, String sortClause);
	
	public List<SysFileForm> getSortedFilesByBusObjAndType(String entity, Long entityId, String fileType, String sortClause);
}
